﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace ErickOrlando.Utilidades.Mvvm
{
	/// <summary>
	/// Clase base para las colecciones de ComplexClass
	/// </summary>
	/// <typeparam name="TModel">Clase que contiene el Modelo</typeparam>
	/// <typeparam name="TSingle">Clase de tipo ComplexClass que representa el elemento singular</typeparam>
	public class ComplexClassCollection<TModel, TSingle> : ObservableCollection<TSingle>
		where TSingle : IComplexClass
	{
		/// <summary>
		/// Crea una nuva instancia de ComplexClassCollection
		/// </summary>
		public ComplexClassCollection(IComplexClass padre)
		{
			Padre = padre;
			_ListaEliminados = new ObservableCollection<TSingle>();
		}

		private ObservableCollection<TSingle> _ListaEliminados;
		/// <summary>
		/// Contiene los elementos eliminados
		/// </summary>
		protected ObservableCollection<TSingle> ListaEliminados
		{
			get { return _ListaEliminados; }
		}
		
		/// <summary>
		/// Representa la clase Padre
		/// </summary>
		public IComplexClass Padre { get; set; }

		/// <summary>
		/// Elimina todos los elementos de la colección
		/// </summary>
		protected override void ClearItems()
		{
			foreach (var item in Items)
				ListaEliminados.Add(item);
			base.ClearItems();
		}

		/// <summary>
		/// Actualiza o Inserta los elementos en la base de datos
		/// </summary>
		protected void Update()
		{
			//Recorremos los elementos eliminados
			foreach (var item in ListaEliminados)
				item.Delete();

			foreach (var item in Items)
				item.Save();
		}


	}

}
